<?php
declare (strict_types = 1);

namespace app\admin\model\admin;

use app\BaseModel;
use app\common\facade\TreeHelper;
use think\Model;

/**
 * @mixin \think\Model
 */
class I18n extends BaseModel
{
    // 默认数据库连接
    protected $connection = 'mysql';
    // 主键列
    protected $pk = 'id';
    // 表名称
    protected $name = 'admin_i18n';


    // 自动填充
    protected $insert = ['is_leaf','key'];
    public function setIsLeafAttr($value, $data)
    {
        $result = 0;
        if(array_key_exists('value',$data)){
            $result = !empty($data['value']) ? 1 : 0;
        }
        return $result;
    }

    public function setKeyAttr($value, $data)
    {
        if(empty($data['lang_key'])){
            return empty($data['segment']) ? '' : $data['segment'];
        } else {
            return $data['lang_key'] . '.' . $data['segment'];
        }
    }


//    // 追加读取器属性
//    protected $append = ['key'];
//    /**
//     * 读取器，附加用户所属角色的信息
//     * @return string
//     */
//    public function getKeyAttr($value,$data): string
//    {
//        if(empty($data['lang_key'])){
//            return empty($data['segment']) ? '' : $data['segment'];
//        } else {
//            return $data['lang_key'] . '.' . $data['segment'];
//        }
//    }




    // 每个子节点都有一个父节点
    public function parent()
    {
        return $this->belongsTo(I18n::class, 'pid', 'id');
    }
    // 一个节点有多个子节点
    public function children()
    {
        return $this->hasMany(I18n::class, 'pid', 'id');
    }
    // 自动同步键名
    public static function onBeforeUpdate(Model $model): void
    {
        parent::onBeforeUpdate($model);

        if ($model->isChange('pid')) {
            self::generatePidsAndPnames($model);
        }
    }

    // 自动同步键名
    public static function onBeforeInsert(Model $model): void
    {
        parent::onBeforeInsert($model);

        if ($model->isChange('pid')) {
            self::generatePidsAndPnames($model);
        }
    }

    private static function generatePidsAndPnames(Model $model): void
    {
        if (empty($model->pid)) {
            $model->pids = '0';
            $model->lang_key = null;
            return;
        }

        $model->pids = TreeHelper::findParentIds($model->pid,$model->getName(),);
        $model->lang_key = TreeHelper::findParentNames($model->pid,$model->getName(),'.','id','pid','segment');
    }
}
